# -*- coding: utf-8 -*-
# @Time : 2022-01-08 17:15
# @Author : Z
# @Function :
import os

import pytest
from Common.Excel.excel import get_reader, get_writer
from Common.Logger import logger
from Keywords.web_keys import Web


class Conf:

    def __init__(self):
        self.cases = []
        self.obj = Web()
        # 模块名称，sheet页名
        self.feature = ''
        self.feature_idx = 0
        # 用户故事，用例模块
        self.story = ''
        self.story_idx = 0
        self.writer = None

        # 记录用例的序号
        self.case_idx = 0

    def runCase(self, case_path='', result_path=''):
        try:
            reader = get_reader(case_path)
            self.writer = get_writer(case_path, result_path)
            sheetname = reader.get_sheets()
            for sheet in sheetname:
                # 模块名称，sheet页名
                self.feature = sheet
                self.feature_idx += 1
                print(self.feature)
                print(self.feature_idx)
                # 用户故事，用例模块
                self.story_idx = 0
                reader.set_sheet(sheet)
                self.writer.set_sheet(sheet)
                lines = reader.readline()
                case = []

                for i in range(1, len(lines)):
                    line = lines[i]
                    # 如果是模块，证明已经读取完上一个模块的用例
                    if len(line[0]) > 1:
                        # case添加到cases,重置case，用于存储下一个用例
                        if case:
                            self.cases.append(case)
                            case = []
                            # 执行上一个模块所有的用例
                            self.__run_pytest()

                        # 获取模块的名称
                        self.story = line[0]
                        self.story_idx += 1
                        self.writer.row = i
                        # 用例的序号+1
                        self.case_idx +=1

                    # 如果是用例名，证明已经读取完模块的一个用例，需要继续读取模块的下一个用例
                    elif len(line[1]) > 1:
                        # case添加到cases,重置case，用于存储下一个用例
                        if case:
                            self.cases.append(case)
                            case = []
                        case.append(line)
                    # 如果是步骤，line添加到case
                    else:
                        case.append(line)

                # 保存和运行最后一个模块的用例
                if case:
                    self.cases.append(case)

                if self.cases:
                    # print('执行')
                    self.__run_pytest()

            self.obj.quit()
            self.writer.save_close()
        except Exception as e:
            logger.error(e)
        finally:
            os.rename('./ddt/test_web_%d.py' % self.case_idx, './ddt/test_web_0.py')

    def __run_pytest(self):
        logger.info(self.cases)
        # 重命名
        os.rename('./ddt/test_web_%d.py' % (self.case_idx - 1), './ddt/test_web_%d.py' % self.case_idx)
        pytest.main(['-s', './ddt/test_web_%d.py' % self.case_idx, '--alluredir', './result'])
        self.cases.clear()


# 设置为全局变量
conf = Conf()
